﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace thinger.MTHControlLib
{
    [DefaultEvent("Click")] //控件和窗体的默认事件是Load这里改成Click
    public partial class NaviButton : UserControl
    {


        public NaviButton()
        {
            InitializeComponent();

            //设置组件的样式 解决闪烁的问题，和背景问题
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);//此设置确保控件的所有绘制都通过 WM_PAINT 消息处理。这有助于避免绘制不一致和闪烁问题，
            this.SetStyle(ControlStyles.DoubleBuffer, true);//双缓冲是一种减少或消除闪烁的技术，它通过在内存中绘制控件的副本，然后再一次性将其绘制到屏幕上，从而提高了绘制的平滑性。
            this.SetStyle(ControlStyles.ResizeRedraw, true);//当控件大小改变时，此设置确保控件会重绘其内容。这有助于避免在调整控件大小时出现绘制问题，如未更新的区域或闪烁。
            this.SetStyle(ControlStyles.Selectable, true);//此设置使控件可选择。对于某些控件（如自定义控件），可能需要明确设置此标志以启用选择功能。
            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); //此设置允许控件支持透明背景色。当控件的背景色设置为 Color.Transparent 时，它将显示其父容器的背景。

        }


        private bool isSelect = false;
        [Browsable(true)] //是否显示
        [Category("自定义属性")] //定义属性
        [Description("是否选择")] // 描述
        public bool IsSelect
        {
            get { return isSelect; }
            set { isSelect = value; UpdateImage(); }

        }

        private bool isLeft = true;
        [Browsable(true)] //是否显示
        [Category("自定义属性")] //定义属性
        [Description("是否是左边按钮")] // 描述
        public bool IsLeft
        {
            get { return isLeft; }
            set { isLeft = value; UpdateImage(); }
        }

        private string naviName = "导航系统";
        [Browsable(true)] //是否显示
        [Category("自定义属性")] //定义属性
        [Description("设置导航的名字")] // 描述
        public string NaviName
        {
            get { return naviName; }
            set
            {
                naviName = value;
                this.lblNaviName.Text = naviName;
            }
        }

        /// <summary>
        /// 单击修改导航按钮图片
        /// </summary>
        private void UpdateImage()
        {
            if (IsLeft)
            {
                this.BackgroundImage = IsSelect ? Properties.Resources.LeftSelected : Properties.Resources.LeftUpSelected;
            }
            else
            {
                this.BackgroundImage = IsSelect ? Properties.Resources.RightSelected : Properties.Resources.RightUpSelected;
            }
        }


        
        public new EventHandler Click;
        /// <summary>
        /// 绑定事件，给label绑定整个Click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        [Browsable(true)] //是否显示
        [Category("自定义事件")] //定义属性
        [Description("导航的点击事件")] // 描述
        private void lblNaviName_Click(object sender, EventArgs e)
        {
            this.Click?.Invoke(this, e);
        }
    }
}
